package dvlp.jhlee.myhomeinventory.service;

import java.util.Map;

import dvlp.jhlee.myhomeinventory.dao.UserDao;
import dvlp.jhlee.myhomeinventory.model.User;

/**
 * ユーザテーブル関連サービス
 * @author
 *
 */
public class UserService extends ServiceBase<User, UserDao> {

//    private LendingHistoryDao histDao;
//    private LendingDao lendingDao;
//    private BorrowingDao borrowingDao;
    
    public UserService() {
        dao = new UserDao();
//        histDao = new LendingHistoryDao();
//        lendingDao = new LendingDao();
//        borrowingDao = new BorrowingDao();
    }

    /**
     * ユーザmapを取得する（TODOF: 今回は簡略化のためユーザ名表示用はmapで対応）
     * @return
     */
    public Map<Long, String> getUserMap() {
        return dao.getUserMap();
    }


    /**
     * ログイン用IDからユーザテーブルレコードを取得する
     * @param loginId
     * @return 存在しない場合はnull
     */
    public User getUserModel(String loginId) {
        return dao.getUserModel(loginId);
    }
    
    /**
     * ログイン用ID、パスワードから有効なログインであるかチェックを行い、
     * 有効である場合にはユーザテーブルレコードを取得する
     * @param loginId
     * @param password
     * @return 存在しない場合／パスワード誤りはnull
     */
    public User getUserModel(String loginId, String password) {
        if (loginId == null || password == null) {
            return null;
        }

        User model = dao.getUserModel(loginId);
        if (model == null) {
            return null;
        }
        if (model.getWasDeleted()) {
            return null;
        }
        if (!password.equals(model.getPassword())) {
            return null;
        }
        return model;
    }
    
    /**
     * 追加処理：　同一ログイン用IDは登録不可
     * @param model
     */
    @Override
    public User insert(User model) {
        User user = getUserModel(model.getLoginId());
        if (user != null) {
            throw new RuntimeException("すでに同一ユーザIDで登録済みのため登録できません。");
        }
        return super.insert(model);
    }

    /**
     * 削除処理：　使用中の場合は削除不可
     * @param model
     */
    @Override
    public User delete(User model) {
        if (model == null) {
            return null;
        }

        // TODO: historyチェック　設計次第（ステータスにも依存する）
//        if (histDao.getSizeInUserId(model.getId()) > 0) {
//            // 有効なレコードが存在する
//            // TODO: 独自例外を作るか。また、メッセージを定義するか。
//            throw new RuntimeException("「貸し借り履歴」で使用中のため削除できません。");
//        }

//        if (lendingDao.getSizeInUserId(model.getId()) > 0) {
//            // 有効なレコードが存在する
//            // TODO: 独自例外を作るか。また、メッセージを定義するか。
//            throw new RuntimeException("「貸したいものテーブル」で使用中のため削除できません。");
//        }
//        if (borrowingDao.getSizeInUserId(model.getId()) > 0) {
//            // 有効なレコードが存在する
//            // TODO: 独自例外を作るか。また、メッセージを定義するか。
//            throw new RuntimeException("「借りたいものテーブル」で使用中のため削除できません。");
//        }
        
        return super.delete(model);
    }

}
